#include <iostream>

// 单例-懒汉式实现：不在外面创建对象的一种实现实现方式
class SingleTon {
public:
    //3.提供获取类唯一实例的方法，并使用 public static 修饰
    static SingleTon* getInstance();
    ~SingleTon();

private:
    //1. 私有化构造函数，并删除拷贝构造与等号重载
    SingleTon();
    SingleTon(const SingleTon& signalton) = delete;
    SingleTon& operator=(const SingleTon& signalton) = delete;

    //2.创建类的唯一实例被使用 private static 修饰
    static SingleTon* instance;
};

SingleTon* SingleTon::instance = nullptr;
SingleTon* SingleTon::getInstance() {
    if(instance == nullptr) {
        instance = new SingleTon;
    }
    return instance;
}

// 单例-饿汉式实现：在外面创建对象的一种实现实现方式
class SingleTon {
public:
    //3.提供获取类唯一实例的方法，并使用 public static 修饰
    static SingleTon* getInstance();
    ~SingleTon();

private:
    //1. 私有化构造函数，并删除拷贝构造与等号重载
    SingleTon();
    SingleTon(const SingleTon& signalton) = delete;
    SingleTon& operator=(const SingleTon& signalton) = delete;

    //2.创建类的唯一实例被使用 private static 修饰
    static SingleTon* instance;
};

SingleTon* SingleTon::instance = new SingleTon;
SingleTon* SingleTon::getInstance() {
    // if(instance == nullptr) {
    //     instance = new SingleTon;
    // }
    return instance;
}